/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Blackjack;

import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Michal
 */
public class DriverSesion {
    private DriverDomainSesion DDS;
    private DriverPartida DP;
    private VentNuevaPartida VNP;
    private VentGuardar VG;
    private VentCargarBorrar VCB;
    private VentBorrarPartida VBP;
    private VentPartida VP;
    public Sistem S;
    private int estado;

    public DriverSesion(Sistem s) {
        S = s;
        estado = 0;
    }

    public void nuevaPartida() {
        VNP = new VentNuevaPartida(this);
    }

    public void iniciarPartida() {
        DDS = new DriverDomainSesion();
        S.ocultarMenu();
        List lnyd = VNP.getNombres(); // Operacion que devuelve solo el nimero de jugadores, el dinero y los nombres de los jugadores
        List lconf;
        lconf = VNP.getConf(); // Operacion que devuelve la conf tal y como se pide en DDS
        String error = DDS.iniciarSesion(lconf);
        if (error == null) {
            VNP.dispose();
            int nJug = (Integer)lnyd.get(0);
            VP = new VentPartida(this);
            DP = new DriverPartida(this, VP, DDS, nJug);
            VP.anadirDP(DP);
            VP.actualizarVista(lnyd);
            estado = 1;
            jugar();
        }
        else {
            VNP.setEnabled(true);
            JOptionPane.showMessageDialog(VNP,
            "La estrategia " + error + " no tiene un formato correcto.",
            "Inane warning",
            JOptionPane.WARNING_MESSAGE);
        }
    }

    public void cargarBorrarPartida() {
        VCB = new VentCargarBorrar(this);
    }

    public void cargarPartida() {
        DDS = new DriverDomainSesion();
        List l = DDS.cargarSesion(VCB.getPath());
        if ((Integer)l.get(0) != -1) {
            VCB.dispose();
            int nJug = (Integer)l.get(0);
            S.ocultarMenu();
            VP = new VentPartida(this);
            DP = new DriverPartida(this, VP, DDS, nJug);
            VP.anadirDP(DP);
            DDS.finPartida();
            VP.actualizarVista(l);
            estado = 1;
            jugar();
        }
    }

    public void confirmarBorrar() {
        VCB.setEnabled(false);
        VBP = new VentBorrarPartida(this);
    }

    public void guardarPartida() {
        VG.setEnabled(false);
        DDS.guardarSesion(VG.getPath());
        VP.setEnabled(true);
        VG.dispose();
    }

    public void borrarPartida() {
        DDS = new DriverDomainSesion();
        DDS.borrarSesion(VCB.getPath());
        VCB.ocultarPath();
        VCB.setEnabled(true);
        VBP.dispose();
    }

    public void CancelarBorrar() {
        VCB.setEnabled(true);
        VBP.dispose();
    }

    public void retornarControl() {
        if (estado == 0) S.volverAlMenu();
        else VP.setEnabled(true);
    }

    public void jugar() {
        if (DDS.haAcabado()) {
            VP.mostrarFin();
            acabar();
        }
        else DP.nuevaPartida();
    }

    public void acabar() {
        VP.dispose();
        S.finPartida(DDS.acabar());
    }

    public void cerrarPartida() {
        VP.dispose();
        S.volverAlMenu();
    }

    public void pedirAyuda() {
        VP.setEnabled(false);
        S.mostrarAyuda(1);
    }

    public void guardar() {
        VP.setEnabled(false);
        VG = new VentGuardar(this);
    }
}
